<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>斐波那契数列</title>
  </head>
  <body></body>
  <script>
    // 斐波那契数列又称为黄金分割数列，指的是这样一个数列：1，1，2，3，5，8，13，21，34，55，89...
    // 规律：从第三个数值开始之后的数列值有之前的两个数相加得到
    // 以递归的方式进行展现： F0 = 0,F1 = 1, Fn = (Fn-1) + (Fn - 2) (n >= 2,n ∈ N* ) N* 数列集合

    // 根据 数列号求值 需要初始参数
    // 非递归形态
    // 定义一个函数
    function fibonacci(num) {
      // 根据斐波那契数列特性 前 2 列数值 需要自定
      if (num == 1 || num == 2) {
        return 1;
      } else {
        // 从第三列开始
        let arr = [];
        // 初始状态 数组的第零位是 1，第一位也是 1
        (num1 = 1), (num2 = 1);
        // 从第二位开始循环
        for (let i = 2; i < num; i++) {
          // 求第零位与第一位相加之和
          let temp = num1 + num2;
          // temp 为 2 的情况下 为下一列循环做准备
          num1 = num2;
          // 把第零位的数字赋值给下一位,把第一位的数字赋值给上两个数字的求的之和
          num1 = temp;
        }
        return num1;
      }
    }

    // 2. 递归实现斐波那契数列
    function fibonacci(num) {
      if (num == 1 || num == 2) {
        return 1;
      }
      return fibonacci(num - 1) + fibonacci(num - 2);
    }
    // 因为使用递归会消耗内存资源，所以浏览器会出现卡死现象

    // console.log(fibonacci(10));
    for (let i = 1; i <= 10; i++) {
      console.log(i, fibonacci(i));
    }
  </script>
</html>
